package QianFeng04;

/**
 * 基本数据类型包装类
 * 在Java中有一个设计的原则：“一切皆对象”，
 * Java中的基本数据类型就完全不符合这种设计思想，因为八种基本数据类型并不是引用数据类型。
 * 所以ava中为了解决这样的问题，JDK1.5以后引入了 八种基本数据类型的包装类。
 *
 * 八种包装类分为两大类型:
 * . Number: Integer、 Short、 Long、 Double、 Float、 Byte都是Number的子类表示是一个数字。
 * . Object: Character、 Boolean都是Object的直接子类。
 **/
public class Test16 {
    public static void main(String[] args) {
        //把基本数据类型转换为包装类，成为自动装箱
        Integer i1 = new Integer(10);
        //简写
        Integer i3 = 10;//建议方法
        //把包装类转换为基本数据类型，成为自动拆箱
        int i2 = i1.intValue();


        Integer i4 = new Integer("123");
        System.out.println(i4);
        //将字符串转换成整形
        String num1 = "12";//字符串必须由数字组成
        int i5 = Integer.parseInt(num1);//建议使用此方法
        int i6 = Integer.valueOf(num1);//效率低，多做无用功
        //将字符串转换成浮点型
        float i7 = Float.parseFloat(num1);

        //面试题：
        /*享元模式( Flyweight Pattern)它使用共享对象，用来尽可能减少内存使用量以及分享资讯给尽可能多的相似对象:
        它适合用于当大量对象只是重复因而导致无法令人接受的使用大量内存。通常对象中的部分状态是可以分享。
        常见做法是把它们放在外部数据结构，当需要使用时再将它们传递给享元。*/

        Integer x1 = new Integer(10);
        Integer x2 = new Integer(10);
        System.out.println(x1 == x2);//false
        System.out.println(x1.equals(x2));//true

        Integer y1 = new Integer(128);
        Integer y2 = new Integer(128);
        System.out.println(y1 == y2);//false
        System.out.println(y1.equals(y2));//true

        Integer x3 = 127;
        Integer x4 = 127;
        System.out.println(x3 == x4);//true
        System.out.println(x3.equals(x4));//true

        Integer y3 = 128;
        Integer y4 = 128;
        //详细查看  IntegerCache这个类
        System.out.println(y3 == y4);//false  共享只共享一个字节-128~127 ，128就不在共享
        System.out.println(y3.equals(y4));//true
    }
}

class Int{ }
